home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
057 - Algebra Workshop.dsk
/
EQUATIONS.CLEAR.bas
< prev
next >
Wrap
BASIC Source File
|
2019-02-17
|
9KB
|
268 lines
100 REM EQUATIONS CLEAR
110 GOTO 2320
120 HOME
130 REM GCD SUBROUTINE:A,B IN,GCD OUT
140 REM SUBROUTINE ASSUMES B<>0
150 Q = INT(A/B): REM DIVIDE A BY B
160 R = A -Q *B: REM REMAINDER
170 IF R = 0 THEN 210: REM ALGORITHM FINISHED,GCD IS B
180 REM IF R <> 0 MUST DO ANOTHER DIVISION
190 REM NOW SET UP FOR NEXT DIVISION
200 A = B:B = R: GOTO 150
210 GCD = B
220 RETURN
230 REM SUBROUTINE FINISHED
240 REM
250 REM SUBROUTINE TO REDUCE FRACTION
260 REM USING GCD SUBROUTINE
270 REM NUM, DEN IN, NNUM,NDEN OUT
280 REM IF NUM = 0, SKIP GCD SUBRTN
290 IF NUM = 0 THEN NNUM = 0:NDEN = 1: RETURN
300 A = NUM:B = DEN
310 GOSUB 150: REM GCD SUBROUTINE
320 REM SUBROUTINE RETURNS GCD
330 REM NOW DIVIDE OUT BY GCD:
340 NNUM = NUM/GCD:NDEN = DEN/GCD
350 REM REDUCED FORM IS NNUM/NDEN
360 RETURN
370 REM
380 REM SUBROUTINE TO MULTIPLY FRACS
390 REM N1/D1 AND N2/D2 IN, N3/D3 OUT
400 REM
410 REM COMPUTE UNREDUCED PRODUCT NUM/DEN
420 NUM = N1 *N2
430 DEN = D1 *D2
440 GOSUB 250: REM REDUCE TO NNUM/NDEN
450 REM SET UP FOR RETURN
460 N3 = NNUM:D3 = NDEN
470 RETURN
480 REM
490 REM
500 REM SUBROUTINE TO ADD FRACTIONS
510 REM N1/D1 AND N2/D2 IN,
520 REM SUM N3/D3 OUT
530 REM FORM UNREDUCED SUM:
540 NUM = N1 *D2 +N2 *D1
550 DEN = D1 *D2
560 IF NUM = 0 THEN N3 = 0:D3 = 1: GOTO 590: REM SKIP REDUCE
570 GOSUB 250: REM REDUCE TO NNUM/NDEN
580 N3 = NNUM:D3 = NDEN
590 RETURN
600 REM
610 REM SUBRTN TO READ FRAC FROM KYBD
620 REM SUBRTN EXPECTS STRING NUM/DEN
630 REM AND EXTRACTS NUM AND DEN
640 REM BEFORE ENTERING SBRTN, SET
650 REM VV$= SOME CONNECTING WORD
660 REM :PRINT : PRINT "PLEASE TYPE ";VV$;"FRACTION"
670 INPUT A$
680 REM SEARCH FOR "/" IN A$:
690 FOR K = 1 TO LEN(A$)
700 REM LOOK AT K TH CHARACTER OF A$:
710 CHAR$ = MID$ (A$,K,1)
720 IF CHAR$ = "/" THEN 790: REM FOUND "/"
730 NEXT : REM KEEP LOOKING FOR "/"
740 REM HERE, A$ HAS NO "/";ASSUME A$ IS INTEGER
750 NUM = VAL(A$): REM NUMERICAL VAL OF A$
760 DEN = 1
770 RETURN
780 REM HERE, HAVE FOUND "/" AS K-TH CHAR OF A$
790 NUM$ = LEFT$(A$,K -1)
800 DEN$ = RIGHT$(A$, LEN(A$) -K)
810 NUM = VAL(NUM$)
820 DEN = VAL(DEN$)
830 IF DEN = 0 THEN PRINT : PRINT "DENOMINATOR NOT ALLOWED TO BE ZERO.": GOTO 660
840 RETURN
850 REM
860 REM SUB TO GET EQUATIONS
870 REM
880 HOME
890 PRINT "HOW MANY VARIABLES";: INPUT VARS
900 PRINT : PRINT "HOW MANY EQUATIONS";: INPUT EQNS
910 DIM N(EQNS,VARS +1),D(EQNS,VARS +1)
920 FOR ROW = 1 TO EQNS
930 HOME
940 REM GET EQUATION "ROW":
950 REM
960 PRINT "TYPE IN A(1)...A(";VARS;"),";
970 PRINT "AND B ": PRINT : PRINT "FOR EQUATION ";ROW
980 PRINT : FOR COL = 1 TO VARS
990 IF COL <VARS THEN PRINT "A(";COL;")X";COL;"+";
1000 IF COL = VARS THEN PRINT "A(";COL;")X";COL;"=";
1010 NEXT
1020 PRINT "B";: PRINT
1030 FOR COL = 1 TO VARS
1040 PRINT : PRINT "A(";COL;")=";: GOSUB 610: REM FRAC GETTER
1050 N(ROW,COL) = NUM:D(ROW,COL) = DEN
1060 NEXT
1070 PRINT : PRINT "B";"=";: GOSUB 610: REM FRAC GETTER
1080 N(ROW,VARS +1) = NUM:D(ROW,VARS +1) = DEN
1090 PRINT : PRINT "CHECK THE EQUATION": PRINT
1100 GOSUB 1310
1110 PRINT : PRINT "IS THIS CORRECT (Y OR N)";
1120 REM
1130 INPUT ANS$: IF ANS$ = "N" THEN HOME : GOTO 960
1140 IF ANS$ < >"Y" THEN 1130
1150 NEXT ROW
1160 RETURN
1170 REM
1180 REM
1310 REM
1320 REM SUB TO PRINT EQUATION J
1330 REM
1340 FLAG = 0: REM SET = 1 WHEN FIRST NON-ZERO COEF IS FOUND
1350 PRINT ROW;") ";
1360 FOR COL = 1 TO VARS
1370 REM IF COEF = 0, DON'T PRINT
1380 IF N(ROW,COL) = 0 THEN PRINT SPC( 4): GOTO 1540: REM NEXT COL
1390 REM HERE, HAVE NON-ZERO COEF
1400 REM IF FLAG = 1, IT'S NOT THE FIRST NON-ZERO COEF
1410 REM PRINT "+" ONLY FOR POS COEFS
1420 REM AFTER THE FIRST
1430 IF FLAG = 1 AND N(ROW,COL) >0 THEN PRINT "+";
1440 FLAG = 1
1450 REM DON'T PRINT "1" DENOMS
1460 REM DON'T PRINT "1/1" COEFS
1470 IF D(ROW,COL) = 1 THEN IF N(ROW,COL) < >1 THEN PRINT N(ROW,COL);
1480 REM PUT "()" AROUND POS FRACS
1490 IF D(ROW,COL) < >1 AND N(ROW,COL) >0 THEN PRINT "(";N(ROW,COL);"/";D(ROW,COL);")";
1500 REM DON'T PUT "()" AROUND NEG FRACS
1510 IF D(ROW,COL) < >1 AND N(ROW,COL) <0 THEN PRINT N(ROW,COL);"/";D(ROW,COL);
1520 REM PRINT VARIABLE NAME:
1530 PRINT "X";COL;
1540 NEXT
1550 REM HERE, HAVE DEALT WITH ALL X'S
1560 REM IF FLAG = 0, ALL COEFS WERE 0
1570 IF FLAG = 0 AND N(ROW,VARS +1) = 0 THEN 1650: REM WHOLE EQN IS ZERO
1580 IF FLAG = 0 AND N(ROW,VARS +1) < >0 THEN PRINT "ZERO";: REM X TERMS 0, CONST NON-ZERO
1590 REM HERE, FLAG<>0, SO HAVE NON-ZERO X TERM
1600 PRINT "=";
1610 PRINT N(ROW,VARS +1);
1620 REM DON'T PRINT "1" DENOMS:
1630 IF D(ROW,VARS +1) < >1 THEN PRINT "/";D(ROW,VARS +1);
1640 REM CLEAR TO END OF LINE:
1650 PRINT SPC( 40 - POS(0))
1660 FLAG = 0
1670 RETURN
1680 REM
1690 REM
1700 REM SUB TO MULT EQN BY CONST
1710 REM
1720 HOME
1730 PRINT "MULTIPLY WHICH EQUATION";: INPUT ROW
1740 PRINT
1750 PRINT "MULTIPLY BY WHAT?": GOSUB 610: REM FRAC GETTER
1760 REM SET UP FOR MULT SUBRTN
1770 N1 = NUM:D1 = DEN
1780 FOR COL = 1 TO VARS +1
1790 N2 = N(ROW,COL):D2 = D(ROW,COL)
1800 GOSUB 380: REM MULT SUBRTN
1810 N(ROW,COL) = N3:D(ROW,COL) = D3
1820 NEXT COL
1830 REM PRINT EQUATIONS
1840 GOSUB 2060
1850 RETURN
1860 REM
1870 REM
1880 REM
1890 REM SUB TO ADD EQUATIONS
1900 REM ADD EQN FST TO EQN SND
1910 REM PUT RESULT IN EQN SND
1920 REM
1930 PRINT "ADD EQUATION I TO EQUATION J": PRINT
1940 PRINT " I = ": INPUT FST: PRINT
1950 PRINT " J = ": INPUT SND: PRINT
1960 FOR COL = 1 TO VARS +1
1970 REM SET UP FOR ADD SUBRTN
1980 N1 = N(FST,COL):D1 = D(FST,COL)
1990 N2 = N(SND,COL):D2 = D(SND,COL)
2000 GOSUB 500: REM ADD SUBRTN
2010 N(SND,COL) = N3:D(SND,COL) = D3
2020 NEXT
2030 REM PRINT EQUATIONS:
2040 GOSUB 2060
2050 RETURN
2060 REM SUBRTN TO PRINT ALL EQNS
2070 POKE 34,0
2080 HOME
2090 FOR ROW = 1 TO EQNS
2100 GOSUB 1310: REM SINGLE EQN PRINTER
2110 NEXT
2120 POKE 34,6 +EQNS
2130 RETURN
2140 REM
2150 REM SUBRTN TO INTERCHANGE EQNS
2160 REM SWITCH EQNS "FST" AND "SND"
2170 HOME
2180 PRINT : PRINT "INTERCHANGE WHICH EQUATIONS"
2190 PRINT : PRINT "FIRST=";: INPUT FST
2200 PRINT "SECOND=";: INPUT SND
2210 FOR COL = 1 TO VARS +1
2220 REM HOLD COEF OF X(COL) FROM EQN FST:
2230 NT = N(FST,COL):DT = D(FST,COL)
2240 REM NOW SWITCH:
2250 N(FST,COL) = N(SND,COL)
2260 D(FST,COL) = D(SND,COL)
2270 N(SND,COL) = NT
2280 D(SND,COL) = DT
2290 NEXT : GOSUB 2060: REM PRINT EQUATIONS
2300 RETURN
2310 REM
2320 REM PROG TO REDUCE EQUATIONS
2330 HOME
2340 PRINT " THIS PROGRAM WORKS WITH SYSTEMS OF"
2350 PRINT : PRINT "LINEAR EQUATIONS IN ONE OR MORE"
2360 PRINT : PRINT "VARIABLES."
2370 PRINT : PRINT : PRINT " IT CAN INTERCHANGE EQUATIONS AND"
2380 PRINT : PRINT "CLEAR VARIABLES, GIVEN THE PIVOT"
2390 PRINT : PRINT "EQUATION AND VARIABLE."
2400 VTAB 20
2410 PRINT "PRESS ANY KEY TO CONTINUE."
2420 GET ANS$
2430 HOME
2440 GOSUB 850: REM GET EQUATIONS
2450 HOME
2460 GOSUB 2060: REM PRINT EQUATIONS
2470 PRINT : PRINT "TO INTERCHANGE, TYPE I"
2480 PRINT : PRINT "TO CLEAR A VARIABLE, TYPE C"
2490 PRINT : PRINT "TO STOP, TYPE S"
2500 PRINT : PRINT "WHICH DO YOU WISH TO DO";
2510 INPUT ANS$
2520 IF ANS$ = "I" THEN GOSUB 2150: GOTO 2470
2530 IF ANS$ = "C" THEN GOSUB 2570: GOTO 2470
2540 IF ANS$ = "S" THEN POKE 34,0: HOME : PRINT "SO LONG!": FOR I = 1 TO 1000: NEXT I: PRINT CHR$(4);"RUN MENU"
2550 GOTO 2500
2560 REM
2570 REM SUBROUTINE TO CLEAR A VARIABLE
2580 HOME
2590 PRINT : PRINT "CLEAR WHICH VARIABLE";
2600 INPUT PVAR$:PVAR = VAL( RIGHT$(PVAR$,1))
2610 PRINT "USING WHICH EQUATION";
2620 INPUT PEQN
2630 REM REDUCE PIVOT COEFFICIENT TO 1
2640 REM SET UP FOR MULT SBRTN
2650 ROW = PEQN
2660 N1 = D(PEQN,PVAR):D1 = N(PEQN,PVAR): REM NOTE RECIPROCAL
2670 GOSUB 1780: REM MULT EQN "ROW" BY N1/D1
2680 FOR RW = 1 TO EQNS
2690 REM SKIP PIVOT EQN AND THOSE WITH COEF ON X(PVAR) ALREADY 0:
2700 IF RW = PEQN OR N(RW,PVAR) = 0 THEN 2880
2710 REM MULT PEQN SO AS TO CANCEL
2720 REM MULT PIVOT EQN BY ADDITIVE INVERSE
2730 REM OF COEF OF X(PVAR) IN EQN RW:
2740 REM SET UP FOR MULTIPLYING SUBROUTINE:
2750 ROW = PEQN
2760 N1 = -N(RW,PVAR):D1 = D(RW,PVAR): REM NOTE ADDITIVE INVERSE
2770 GOSUB 1780: REM MULT EQN "ROW" BY N1/D1
2780 REM ADD NEW EQUATION PEQN TO EQN RW
2790 REM TO CANCEL X(PVAR) TERM FROM EQN RW:
2800 FST = PEQN:SND = RW: GOSUB 1960
2810 PRINT
2820 REM RESTORE PIVOT EQUATION
2830 IF N(PEQN,PVAR) = 1 AND D(PEQN,PVAR) = 1 THEN 2880: REM SKIP RESTORING
2840 REM SET UP FOR MULT SUBRTN:
2850 ROW = PEQN
2860 N1 = D(PEQN,PVAR):D1 = N(PEQN,PVAR): REM NOTE RECIPROCAL
2870 GOSUB 1780: REM MULT SUBRTN
2880 NEXT : REM CLEAR X(PVAR) FROM NEXT EQN
2890 RETURN